import axios, { AxiosError, type AxiosRequestConfig, type InternalAxiosRequestConfig } from 'axios'

interface AxiosRequestConfigEx extends AxiosRequestConfig {
  donNotShowLoading?: boolean
}
export type ResType<T = any> = {
  code: string
  data: T
  msg: string
}

export type PageDataType<T> = {
  list: T[]
  pageNum: number
  pageSize: number
  total: number
}

export type RolesType = {
  code: string
  createTime?: string
  id?: number
  name: string
  sort: number
  status: number
}

// axios.create 创建一个 axios 实例, 避免重复配置, 优化代码
const instance = axios.create({
  baseURL: import.meta.env.VITE_BASE_PATH,
  timeout: 100
})

// http request 拦截器
// instance.interceptors.request.use(
//   (config: InternalAxiosRequestConfig) => {
//     // 使用 set 方法来设置 headers
//     config.headers.set('Content-Type', 'application/json')
//     return config
//   },
//   (error: AxiosError) => {
//     // 请求报错
//     Promise.reject(error)
//   }
// )

// instance.interceptors.response.use(
//   (response) => {
//     // 响应成功时做一些处理
//     console.log('响应拦截器：', response)
//     return response
//   },
//   (error) => {
//     // 统一处理错误信息
//     if (error.response.status === 401) {
//       // 如果是 401 错误，可能是未授权，跳转到登录页面
//       window.location.href = '/login'
//     } else if (error.response.status === 500) {
//       // 服务器错误
//       console.log('服务器错误')
//     }
//     return Promise.reject(error)
//   }
// )

// http request 拦截器
instance.interceptors.request.use((config: InternalAxiosRequestConfig) => {

  // 使用 set 方法来设置 headers  
  config.headers.set('Content-Type', 'application/json');
  // return {
  //   ...config,
  //   headers: {
  //     'x-access-token': '', // 请求头中携带token信息
  //   }
  // }

  return config
},
  (error: AxiosError) => {
    // 请求报错
    Promise.reject(error)
  })


instance.interceptors.response.use(
  response => {
    // 响应成功时做一些处理
    console.log('响应拦截器: ', response);
    return response;
  },
  error => {
    // 统一处理错误信息
    if (error.response.status === 401) {
      // 如果是 401 错误，可能是未授权，跳转到登录页面
      window.location.href = '/login';
    } else if (error.response.status === 500) {
      // 服务器错误
      console.error('服务器错误');
    }

    return Promise.reject(error);
  }
);

// 服务请求
export const service = <T = any>(config: AxiosRequestConfigEx) => {
  return instance.request<ResType<T>>(config).then((response) => response.data)
}

// 角色分页列表
export const requestGetRolesPage = (params: any) => {
  return service<PageDataType<RolesType>>({
    method: 'get',
    url: '/roles/page',
    params
  })
}
const requestGetRolesPageHandler = async () => {
  const res = await requestGetRolesPage({ pageNum: 1, pageSize: 40 })
  console.log(res)
}

/**
 * 添加角色
 */
export const addRole = (data: any) => {
  return service({
    method: 'post',
    url: '/roles',
    data
  })
  // return instance.request<ResType>({
  //   method: 'post',
  //   url: '/roles',
  //   data,
  // })
  // .then(response => console.log(response.data))
  // .catch(error => console.error(error));
}

/**
 * 修改角色
 */
export const editRole = (roleId:number, data: RolesType)=>{
  return service({
    method: 'put',
    url: `/roles/${roleId}`,
    data
  })
}

/**
 * 修改角色状态
 */
export const editRoleStatus = (roleId:string, status: number)=>{
  return service({
    method: 'patch',
    url: `/roles/${roleId}/status`,
    params: { status }
  })
}

/**
 * 删除角色
 */
export const delRole = (ids: string)=>{
  return service({
    method: 'delete',
    url: `/roles/${ids}`,
  })
}